main() {
  //创建一辆五菱汽车
  var wuLing = WuLing();
  //一辆红色的五菱汽车
  wuLing.setColor("红色");
  //拉货
  wuLing.pickGoods("快递");
  //接人送人
  wuLing.pickUp("老婆");
  //会跑
  wuLing.run();
}

//汽车,抽象类,不能被实例化,被继承提供一类事物的共有属性
abstract class Car {
  String _id;
  String _paiLiang;

  Car(String id, String paiLiang)
      : _id = id,
        _paiLiang = paiLiang;

  run() {
    print("排量:${_paiLiang},车牌:${_id},兜风");
  }

  //抽象方法,需要子类实现
  void setColor(var color);
}

//货拉拉接口,接口提供事物的附加属性
abstract class HuoLaLa {
  void pickGoods(var goods);
}

//私家车
class PrivateCar {
  void pickUp(var person) {
    print("接送$person上下班");
  }
}

//五菱汽车,首先这是一辆私家车(with)得接送老婆上下班,使用(with)实现的类的方法不必要覆写
//其次这辆车还实现(implements)了货拉拉接口可以拉货赚钱.使用(implements)实现的类的方法必须覆写
class WuLing extends Car with PrivateCar implements HuoLaLa {
  WuLing() : super("123456", "4.0T");

  //覆写汽车的抽象方法
  @override
  void setColor(color) {
    print("颜色:$color");
  }

  //实现货拉拉接口的抽象方法
  @override
  pickGoods(var goods) {
    print("拉货:$goods");
  }
}
